package com.reflect3;

import com.reflect3.Student;

import java.lang.reflect.Field;

public class MyReflectDemo {
    public static void main(String[] args) throws Exception{
        /**
         * Class类中用于获取成员变量的方法
         *     Field[] getFields():返回所有公共成员变量对象的数组
         *     Field[] getDeclaredFields():返回所有成员变量对象的数组
         *     Field getField(String name):返回单个公共成员变量对象
         *     Field getDeclaredField(String name):返回单个成员变量对象
         *
         *
         *     Field类中用于创建对象的方法
         *         void set(Object obj,Object value):赋值
         *         Object get(Object obj)获取值
         */

        //1.获取class字节码文件的对象
        Class clazz = Class.forName("com.reflect3.Student");

        //2.获取所有的成员变量
        /*Field[] fields = clazz.getDeclaredFields();
        for (Field field : fields) {

            System.out.println(field);
        }*/

        //获取单个的成员变量

        Field name = clazz.getDeclaredField("name");
        System.out.println(name);

        //获取权限修饰符
        int modifiers = name.getModifiers();
        System.out.println(modifiers);

        //获取成员变量的名字
        String name1 = name.getName();
        System.out.println(name1);

        //获取成员变量的类型
        Class type = name.getType();
        System.out.println(type);

        //获取成员变量记录的值
        Student student = new Student("张三", 23, "男");
        //暴力反射
        name.setAccessible(true);
        Object value = name.get(student);
        System.out.println(value);

        //修改对象里面记录的值
        name.set(student,"李四");
        System.out.println(student);
    }
}
